// 供应商
// 作者：洪刚


const db = require("../model/db");
const express = require("express");
const router = express.Router();
const multer = require("multer");
const path = require("path");

// 作者：洪刚
// 添加供应商
router.post("/add", async (req, res) => {
    const data = await db.Supplier.create(req.body);
    res.send({
        code: 0,
        msg: "",
        count: 0,
        data: data
    })
})

// 作者：洪刚
// 得到供应商详情
router.get("/all", async (req, res) => {
    let page = parseInt(req.query.page);
    let limit = parseInt(req.query.limit);
    if (!page) {
        page = 1;
    }
    if (!limit) {
        limit = 10;
    }
    let connection = {};  //条件对象
    if (req.query.key) {
        const exp = new RegExp(req.query.key, "i")//不区分大小写，模糊查询正则表达式
        connection = {
            $or: [
                { name: { $regex: exp } },   //供应商名字
                { address: { $regex: exp } }, //地址
                { phone: { $regex: exp } }, //电话
                { website: { $regex: exp } }, //网址
                { desc: { $regex: exp } } //备注
            ]
        }
    }
    const data = await db.Supplier.find(connection).skip((page - 1) * limit).limit(limit);
    const count = await db.Supplier.countDocuments(connection);
    res.send({
        code: 0,
        msg: "",
        count: count,
        data: data
    });
})

// 根据供应商得到相应的货品
// 作者：洪刚
router.get("/suppliergoods/:id", async (req, res) => {
    let page = parseInt(req.query.page);
    let limit = parseInt(req.query.limit);
    if (!page) {
        page = 1;
    }
    if (!limit) {
        limit = 10;
    }
    const data = await db.Suppliergoods.find({
        Supplier: req.params.id
    }).populate("Suppliergoods").skip((page - 1) * limit).limit(limit);
    const count = await db.Suppliergoods.countDocuments({
        Supplier: req.params.id
    });
    res.send({
        code: 0,
        msg: "",
        count: count,
        data: data
    })

})

// 作者：洪刚
// 得到单个供应商
router.get("/:id", async (req, res) => {
    const data = await db.Supplier.findById(req.params.id);
    res.send({
        code: 0,
        msg: "",
        count: 0,
        data: data
    })
})

// 作者:洪刚
// 修改供应商
router.put("/:id", async (req, res) => {
    const data = await db.Supplier.updateOne( //条件对象
        { _id: req.params.id }, req.body)
    res.send(true)
})

// 作者：洪刚
// 删除供应商
router.delete("/:id", async (req, res) => {
    await db.Supplier.deleteOne({
        _id: req.params.id
    })
    res.send(true);
})



// 随机函数 方便命名文件
function rand(min, max) {
    const dec = max - min;
    return parseInt(Math.random() * dec + min);
}

//作者:洪刚
// 创建存储对象
const storage = multer.diskStorage({ //文件名
    destination: path.join(__dirname, "../public/upload/"), //配置文件存储的目标文件夹
    filename: function (req, file, cb) { //配置文件名
        const fname = Date.now() + "" + rand(1000000, 10000000) + path.extname(file.originalname).toLowerCase();
        cb(null, fname);
    }
});

// 作者：洪刚
//配置上传处理
const upload = multer({
    storage,
    // 服务端如何限制文件类型
    fileFilter: function (req, file, cb) { //限制文件类型
        cb(null, true); //表示通过
    }
}).array("file");

// 作者：洪刚
// 请求方法
router.post("/upload/add", async (req, res) => {
    // 服务器如何响应错误
    upload(req, res, async function (err) { //文件类型不正确时不错误不出现到服务器
        if (err) {
            console.log("错误", err)
            res.send({
                code: 401,
                message: "",
                data: []
            })
        } else {
            // console.log("图片上传成功");
            const data = req.files.map(item => "http://localhost:3000/upload/" + item.filename);
            res.send({
                code: 0,
                message: "",
                data: data
            })
        }
    });
})


router.put("/upload/:id", async (req, res) => {
    upload(req, res, async function (err) { //文件类型不正确时不错误不出现到服务器
        if (err) {

        } else {
            await db.Supplier.updateOne({
                _id: db.ObjectId(req.params.id)
            }, req.body); //(要修改的对象)
            res.send(true);
        }
    })
})


module.exports = router;